package org.example.fastproject.web.sys.service;

import org.example.fastproject.web.sys.model.vo.menu.MenuNode;
import org.example.fastproject.web.sys.model.vo.user.UserLoginVo;
import org.example.fastproject.web.sys.model.vo.user.UserVo;

import java.util.List;

/**
 * @Author 王海舟
 * @Date 2023/1/16 13:04
 * @PackageName:org.example.fastproject.web.sys.service
 * @ClassName: SysCacheService
 * @Description: 缓存服务类
 * @Version 1.0
 */
public interface SysCacheService {
    /**
     * 缓存登录用户信息
     * @param token
     * @param userId
     */
    void setLogin(Long userId,String token);

    /**
     * 获取登录用户信息
     * @param userId
     * @return
     */
    String getLogin(Long userId);

    /**
     * 删除登录用户信息
     * @param userId
     */
    void removeLogin(Long userId);

    /**
     * 缓存菜单树
     * @param tree
     */
    void setMenuTree(List<MenuNode> tree);

    /**
     * 缓存用户的菜单树
     * @param userId
     * @param tree
     */
    void setMenuTree(Long userId,List<MenuNode> tree);

    /**
     * 获取菜单树
     * @return
     */
    List<MenuNode> getMenuTree();

    /**
     * 获取用户的菜单树
     * @param userId
     * @return
     */
    List<MenuNode> getMenuTree(Long userId);

    /**
     * 删除菜单树
     */
    void removeMenuTree();


    /**
     * 删除用户的菜单树
     * @param userId
     */
    void removeMenuTree(Long userId);

    /**
     * 缓存用户信息
     * @param userId
     * @param userVo
     */
    void setUser(Long userId, UserVo userVo);

    /**
     * 获取用户信息
     * @param userId
     * @return
     */
    UserVo getUser(Long userId);

    /**
     * 删除用户信息
     * @param userId
     */
    void removeUser(Long userId);

    /**
     * 缓存用户的权限列表
     * @param userId
     * @param permissions
     */
    void setPermission(Long userId,List<String> permissions);

    /**
     * 获取用户的权限列表
     * @param userId
     * @return
     */
    List<String> getPermission(Long userId);

    /**
     * 删除用户的权限列表
     * @param userId
     */
    void removePermission(Long userId);

    /**
     * 缓存验证码
     * @param key
     * @param code
     */
    void setVerify(String key, String code);

    /**
     * 获取验证码
     * @param key
     * @return
     */
    String getVerify(String key);
}
